iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
0

Filter 過濾

今天來介紹過濾 filter,過濾顧名思義就是能夠將資料在顯示之前作前處理的方式,直接來看範例會比較清楚。

<div id="app">
  <p>{{ price | currency}}</p>
</div>
new Vue({
  el: '#app',
  data: {
      price: 45360
  },
  filters: {
   currency: function(value) {
      return value.toString().replace(/^(-?\d+?)((?:\d{3})+)(?=\.\d+$|$)/,
        function (all, pre, groupOf3Digital) {
           return pre + groupOf3Digital.replace(/\d{3}/g, ',$&');
        }
      )
    }
  }
})

可以看到上面範例中,要使用過濾我們需要在要過濾的資料變數後方加上 | 的符號,而在 Vue 的應用程式中需要撰寫你所需要的過濾的方式,內容和 computed 其實蠻像的,都是需要 return 值,不過 filter 其實是可以重複使用而且同一筆資料也可以套用多個 filter 的唷!
來看看下面的範例:

<div id="app">
  <p>{{ priceA | currency | dollarsSign }}</p>
  <p>{{ priceB | currency | dollarsSign }}</p>
</div>
new Vue({
  el: '#app',
  data: {
      priceA: 45360,
      priceB: 3999
  },
  filters: {
      currency: function(value) {
        return value.toString().replace(/^(-?\d+?)((?:\d{3})+)(?=\.\d+$|$)/,
          function (all, pre, groupOf3Digital) {
             return pre + groupOf3Digital.replace(/\d{3}/g, ',$&');
          }
        )
      },
      dollarsSign: function(value) {
        return `$ ${value}`
      },
  }
})

上面我新增了一個新的 filter 和一個新的資料,兩者都套用相同的 filter,都是可以運行的,所以 filter 是可以重複使用的,另外我將兩筆資料都套用兩個 filter,代表同一筆資料是可以套用多個 filter 的唷!不過有一點要特別注意,就是套用 filter 的先後順序會造成結果的不同。

<div id="app">
  <p>{{ priceA | dollarsSign | currency }}</p>
  <p>{{ priceB | dollarsSign | currency }}</p>
</div>

如果將順序改為上面這樣,會發現只有金錢的符號被加了上去,而千分號並沒有正確的加上,是因為 filter 是由左到右計算的,所以在套用多個 filter 的時候,要確定順序會不會影響結果唷!

那麼,明天再見囉!


上一篇
Day 9 : Watch 監聽屬性
下一篇
Day 11 : 生命週期 Lifecycle
系列文
Vue 學習筆記 - 讓你30天掌握 Vue31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言